//package com.lucky.auth_boot.interceptor;
//
//import com.lucky.auth_boot.pojo.po.UserPO;
//import com.lucky.auth_boot.exception.BusinessException;
//import com.lucky.auth_boot.utils.JwtUtil;
//import com.lucky.auth_boot.utils.RedisUtil;
//import com.lucky.auth_boot.utils.ThreadLocalUtil;
//import io.micrometer.common.util.StringUtils;
//import jakarta.annotation.Resource;
//import jakarta.servlet.http.HttpServletRequest;
//import jakarta.servlet.http.HttpServletResponse;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.web.servlet.HandlerInterceptor;
//
//@Component
//@Slf4j
//public class UserInterceptor implements HandlerInterceptor {
//    @Resource
//    RedisUtil redisUtil;
//    /**
//     * 进入controller方法之前执行。如果返回false，则不会执行 controller 的方法
//     *
//     * @param request 请求
//     * @param response 响应
//     * @param handler 处理器
//     * @return 是否放行
//     */
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
//        // 获取 header 中的 Authorization 信息
//        String token = request.getHeader("token");
//        if (token == null) {
//            throw new BusinessException(401, "令牌不能为空");
//        }
//        if (StringUtils.isNotBlank(token)) {
//            UserPO userPO = JwtUtil.verifyAndGetUser(token);
//            if (userPO != null) {
//                // UserHolder.setUserInfo(authUser);
//                //Redis判断令牌
//                String redisToken = (String) redisUtil.getValue(String.valueOf(userPO.getUid()));
//                if (!token.equals(redisToken)){
//                    throw new BusinessException(401, "令牌已失效，请重新登录");
//                }
////                通过就放进内存
//                ThreadLocalUtil.set(userPO);
//            } else {
//                log.error("token 验证失败！token is {}, uri is {}", token, request.getRequestURI());
//                throw new BusinessException(401, "令牌校验不通过");
//            }
//        } else {
//            log.error("token 验证失败！token is {}, uri is {}", token, request.getRequestURI());
//            throw new BusinessException(401, "令牌不能为空");
//        }
//        return true;
//    }
//
//    /**
//     * 响应结束之前
//     * @param request 请求
//     * @param response 响应
//     * @param handler 处理器
//     */
//    @Override
//    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
//        // 清理掉当前线程中的数据，防止内存泄漏
////        UserHolder.remove();
//        ThreadLocalUtil.remove();
//    }
//}
